package jukebox.model.musicboard;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import jukebox.model.common.PagingBean;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

/**
 * @author : 김준섭
 * @since : 2014-06-20
 * @comment : 음악게시물의 DB처리를 위한 영속성 클래스 
 */
@Repository
public class MusicBoardDAOImpl implements MusicBoardDAO {
	@Resource(name="sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;
	
	/**
	 * @method : writeContent
	 * @author : 김준섭
	 * @since : 2014-06-24
	 * @param : MusicBoardVO mbvo - 등록될 음악게시물 정보
	 * @return : void
	 * @comment : 음악게시물을 등록하기 위한 함수 
	 */
	@Override
	public void writeContent(MusicBoardVO mbvo) {
		sqlSessionTemplate.insert("musicboard.writeContent", mbvo);
	}

	/**
	 * @method : updateContent
	 * @author : 김준섭
	 * @since : 2014-06-25
	 * @param : MusicBoardVO mbvo - 수정될 음악게시물 정보
	 * @return : void
	 * @comment : 음악게시물을 수정하기 위한 함수 
	 */
	@Override
	public void updateContent(MusicBoardVO mbvo) {
		sqlSessionTemplate.update("musicboard.updateContent", mbvo);
	}

	/**
	 * @method : deleteContent
	 * @author : 김준섭
	 * @since : 2014-06-25
	 * @param : int no - 삭제될 음악게시물 번호
	 * @return : void
	 * @comment : 음악게시물을 삭제하기 위한 함수 
	 */
	@Override
	public void deleteContent(int no) {
		sqlSessionTemplate.delete("musicboard.deleteContent", no);
	}

	/**
	 * @method : getContentListPerPage
	 * @author : 김준섭
	 * @since : 2014-06-23
	 * @param : Map map - 수정될 음악게시물 정보
	 * 							페이지 정보를 저장하는 PagingBean과
	 * 							검색을 위한 MusicBoardVO가 담겨있다.	
	 * @return : List<MusicBoardVO> - 한 페이지의 게시물 리스트
	 * @comment : 한 페이지에 해당하는 게시물 리스트를 받아오기 위한 함수 
	 */
	@Override
	public List<MusicBoardVO> getContentListPerPage(Map map) {
		return sqlSessionTemplate.selectList("musicboard.getContentListPerPage", map);
	}
	
	/**
	 * @method : getContentListPerMorePage
	 * @author : 김준섭
	 * @since : 2014-06-23
	 * @param : Map map - 수정될 음악게시물 정보
	 * 							페이지 정보를 저장하는 PagingBean과
	 * 							검색을 위한 MusicBoardVO가 담겨있다.	
	 * @return : List<MusicBoardVO> - 한 페이지의 게시물 리스트
	 * @comment : 더보기 페이지에 해당하는 게시물 리스트를 받아오기 위한 함수
	 */
	@Override
	public List<MusicBoardVO> getContentListPerMorePage(Map map) {
		return sqlSessionTemplate.selectList("musicboard.getContentListPerMorePage", map);
	}

	/**
	 * @method : getTotalContent
	 * @author : 김준섭
	 * @since : 2014-06-23
	 * @param : MusicBoardVO mbvo - 게시물 검색을 위한 변수
	 * @return : int - 검색된 게시물의 갯수
	 * @comment : 검색된 게시물의 총 갯수를 검색하는 함수
	 */
	@Override
	public int getTotalContent(MusicBoardVO mbvo) {
		return sqlSessionTemplate.selectOne("musicboard.getTotalContent", mbvo);
	}

	/**
	 * @method : findContentByNo
	 * @author : 김준섭
	 * @since : 2014-06-24
	 * @param : int no - 검색할 게시물 번호
	 * @return : MusicBoardVO - 검색된 게시물의 상세정보
	 * @comment : 게시물의 상세정보를 게시물번호로 검색하는 함수
	 */
	@Override
	public MusicBoardVO findContentByNo(int no) {
		return sqlSessionTemplate.selectOne("musicboard.findContentByNo", no);
	}

	/**
	 * @method : updateLike
	 * @author : 김준섭
	 * @since : 2014-06-27
	 * @param : int boardNo - 추천수를 증가시켜줄 게시물번호
	 * @return : int - 게시물의 추천수를 증가시켰나 확인을 위한 변수
	 * @comment : 음악게시물 추천수를 증가시키는 함수
	 */
	@Override
	public int updateLike(int boardNo) { 
		return sqlSessionTemplate.update("musicboard.updateLike", boardNo);
	}

	/**
	 * @method : updateHit
	 * @author : 김준섭
	 * @since : 2014-06-27
	 * @param : int boardNo - 조회수를 증가시켜줄 게시물번호
	 * @return : void 
	 * @comment : 음악게시물 조회수를 증가시키는 함수
	 */
	@Override
	public void updateHit(int boardNo) {
		sqlSessionTemplate.update("musicboard.updateHit", boardNo);
	}

	/**
	 * @method : getRankListByLike
	 * @author : 김준섭
	 * @since : 2014-06-30
	 * @return : List<MusicBoardVO> - 추천수 1~10위 게시물 정보
	 * @comment : 음악게시물 추천수기준으로 10개를 가져오는 함수
	 */
	@Override
	public List<MusicBoardVO> getRankListByLike() {
		return sqlSessionTemplate.selectList("musicboard.getRankListByLike");
	}
}
